﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Data.OleDb;
using System.Reflection;
using System.IO;
using System.Diagnostics;


namespace template_dll
{
    public partial class Form2 : Form
    {
  //     int rezult;                                                 //- результат выполнения запроса к базе
        private SqlConnection conn;             
        int sr;                                                     //- текущая строка DataGridView;
        public DataTable dt_param = new DataTable();                //- для передачи параметров в sql запрос
        private DataTable[] dt_m = new DataTable[2];                //- для загрузки названий маркировок
        public bool flag = false;                                   //- флаг новой\старой маркировки (1\0)
        public Form2()
        {
            InitializeComponent();
        }
        private string GetServ(string filename)
        {
            string str = "";
            using (StreamReader streamReader = new StreamReader(filename))
            {
                while (!streamReader.EndOfStream)
                {
                    str += streamReader.ReadLine();
                }
            }
            return str;
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            ((ChildForm)template_dll.ChildForm.cMain.Form1Control).Enabled = false;
            conn = new SqlConnection(@"Server=" + GetServ("serv.txt") + ";Database=ToolsDM;Integrated Security=True");
            if (((ChildForm)template_dll.ChildForm.cMain.Form1Control).dataGridView1.Rows.Count != 0)
            {
                //- значение текущей строки dataGridView
                sr = ((ChildForm)template_dll.ChildForm.cMain.Form1Control).dataGridView1.CurrentRow.Index;
            }
            else
            {
                //- в dataGridView нет строк
                sr = 0;
            }
            textBox3.Visible = false;
            comboBox1.Visible = true;
            checkBox1.Checked = true;
            dateTimePicker1.Value = ((ChildForm)template_dll.ChildForm.cMain.Form1Control).dateBegin;
            dateTimePicker2.Value = ((ChildForm)template_dll.ChildForm.cMain.Form1Control).dateStop;
            comboBox2.SelectedIndex = -1;
            comboBox3.SelectedIndex = -1;
        }
        //-  Выбираем акцию из списка или добавляем новую
        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox1.Checked == false)
            {
                //- Добавление новой акции
                textBox3.Visible = true;
                textBox3.Text = "";
                comboBox1.Visible = false;
                flag = true;
            }
            if (checkBox1.Checked == true)
            {
                //- Выбор существующей акции
                textBox3.Visible = false;
                comboBox1.Visible = true;
                flag = false;
                SqlStorProc.sp_params[] par = new SqlStorProc.sp_params[1];
                par[0].name = "@pointer";
                par[0].value = 1;
                //- заливка существующих акций
                dt_m = (new SqlStorProc()).SqlProcExecWithQuery(conn, "pas_FillAttributesDrugs", 300, par);
                comboBox1.DataSource = dt_m[0];
                comboBox1.DisplayMember = "NameEvent";            // столбец для отображения
                comboBox1.ValueMember = "id";                       // столбец для счёта
                comboBox2.DataSource = dt_m[1];
                comboBox2.DisplayMember = "DrugCode";               // столбец для отображения
                comboBox2.ValueMember = "id";                       // столбец для счёта
                comboBox3.DataSource = dt_m[1];
                comboBox3.DisplayMember = "DrugName";               // столбец для отображения
                comboBox3.ValueMember = "id";                       // столбец для счёта
            }
        }
        //- Изменение даты начала акции товара 
        private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
        {
            ((ChildForm)template_dll.ChildForm.cMain.Form1Control).dateBegin = this.dateTimePicker1.Value;
        }
        //- Изменение даты окончания акции товара
        private void dateTimePicker2_ValueChanged(object sender, EventArgs e)
        {
            ((ChildForm)template_dll.ChildForm.cMain.Form1Control).dateStop = this.dateTimePicker2.Value;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ((ChildForm)template_dll.ChildForm.cMain.Form1Control).Enabled = true;
            if (comboBox2.SelectedIndex == -1 || comboBox3.SelectedIndex == -1)
            {
                MessageBox.Show("Не выбран товар!");
                return;
            }
            if (comboBox1.SelectedIndex == -1 && comboBox1.Visible == true)
            {
                MessageBox.Show("Не выбрана акция!");
                return;
            }
            if (textBox3.Visible == true && (textBox3.Text == null || textBox3.Text == ""))
            {
                MessageBox.Show("Название акции не введено!");
                return;
            }

            for (int i = 0; i < 3; i++)
            {
                dt_param.Columns.Add();
            }
            DataRow dr = dt_param.NewRow();
            dr[0] = Convert.ToInt32(comboBox2.Text);
            dr[1] = comboBox3.Text;
            if (checkBox1.Checked == true)
            {
                dr[2] = comboBox1.Text;
                MessageBox.Show(dr[2].ToString());
            }
            else
            {
                dr[2] = textBox3.Text;
            }
            dt_param.Rows.Add(dr);
            //SqlStorProc.sp_params[] par = new SqlStorProc.sp_params[4];
            //par[0].name = "@dateBegin";
            //par[0].value = ((ChildForm)template_dll.ChildForm.cMain.Form1Control).dateBegin;
            //par[1].name = "@dateStop";
            //par[1].value = ((ChildForm)template_dll.ChildForm.cMain.Form1Control).dateStop;
            //par[2].name = "@tableDM";
            //par[2].value = dt_param;
            //par[3].name = "@flag";
            //par[3].value = flag;
            //rezult = (new SqlStorProc()).SqlProcExecNonQuery(conn, "AddEventDrug", 300, par);
            //((ChildForm)template_dll.ChildForm.cMain.Form1Control).dateBegin = DateTime.Now;
            //((ChildForm)template_dll.ChildForm.cMain.Form1Control).dateStop = DateTime.Now;
            //dt_param = null;

            ////- Обновление DataGridView на ChildForm
            if (((ChildForm)template_dll.ChildForm.cMain.Form1Control).dataGridView1.Rows.Count > 0 && ((ChildForm)template_dll.ChildForm.cMain.Form1Control).insUp == false)
            {//- изменение акции, если dataGridView содержит данные
                string[] str = new string[((ChildForm)template_dll.ChildForm.cMain.Form1Control).dt_marking.Columns.Count];
                DataRow rd = ((ChildForm)template_dll.ChildForm.cMain.Form1Control).dt_marking.NewRow();
                for (int i = 0; i < ((ChildForm)template_dll.ChildForm.cMain.Form1Control).dt_marking.Columns.Count; i++)
                {
                    //- считываем значения из DataGridView
                    str[i] = ((ChildForm)template_dll.ChildForm.cMain.Form1Control).dataGridView1.Rows[sr].Cells[i].Value.ToString();
                    rd[i] = str[i];
                }
                //- считываем измененные значения
                if (comboBox1.Visible == true)
                {
                    rd[12] = comboBox1.Text;
                }
                else
                {
                    rd[12] = textBox3.Text;
                }
                //rd[13] = dateTimePicker1.Value;
                //rd[14] = dateTimePicker2.Value;
                ((ChildForm)template_dll.ChildForm.cMain.Form1Control).dataGridView1.Rows.RemoveAt(sr);
                ((ChildForm)template_dll.ChildForm.cMain.Form1Control).dt_marking.Rows.RemoveAt(sr);
                ((ChildForm)template_dll.ChildForm.cMain.Form1Control).dt_marking.Rows.Add(rd);
                ((ChildForm)template_dll.ChildForm.cMain.Form1Control).refreshData();
            }
            else
            {
                //- добавление новой акции, список товара не выведен в dataGridView
                try
                {
                    SqlConnection sqlconn = new SqlConnection(@"Server=sdata2;Database=PharmOLAPDW;Integrated Security=True");
                    DataRow rd = ((ChildForm)template_dll.ChildForm.cMain.Form1Control).dt_marking.NewRow();
                    SqlStorProc.sp_params[] p = new SqlStorProc.sp_params[15];
                    p[0].name = "@drugcode";
                    p[1].name = "@drug";
                    p[2].name = "@country";
                    p[3].name = "@prod";
                    p[4].name = "@order";
                    p[5].name = "@spec";
                    p[6].name = "@assort";
                    p[7].name = "@arch";
                    p[8].name = "@categ";
                    p[9].name = "@dep";
                    p[10].name = "@mnn";
                    p[11].name = "@mark";
                    p[12].name = "@guid";
                    p[13].name = "@filtid";
                    p[14].name = "@brandid";
                    p[0].value = Convert.ToInt32(comboBox2.Text);
                    p[1].value = comboBox3.Text;
                    p[2].value = null;
                    p[3].value = null;
                    p[4].value = null;
                    p[5].value = null;
                    p[6].value = null;
                    p[7].value = null;
                    p[8].value = null;
                    p[9].value = null;
                    p[10].value = null;
                    p[11].value = null;
                    p[12].value = null;
                    p[13].value = null;
                    p[14].value = null;
                    DataTable dt_r = new DataTable();       //- Характеристики товара 
                    dt_r = (new SqlStorProc()).SqlProcExecWithQueryOneTable(sqlconn, "pas_AllDrugsSelDM", 300, p);
                    for (int i = 1; i < dt_r.Columns.Count; i++)
                    {
                        rd[i - 1] = dt_r.Rows[0][i].ToString();
                    }
                    if (comboBox1.Visible == true)
                    {
                        rd[12] = comboBox1.Text;
                    }
                    else
                    {
                        rd[12] = textBox3.Text;
                    }
                    //rd[13] = dateTimePicker1.Value;
                    //rd[14] = dateTimePicker2.Value;
                    ((ChildForm)template_dll.ChildForm.cMain.Form1Control).dt_marking.Rows.Add(rd);
                    ((ChildForm)template_dll.ChildForm.cMain.Form1Control).refreshData();

                }
                catch (Exception ex)
                {
                    MessageBox.Show("Неверный формат строки " + ex.Message);
                }
            }

            this.Close();
        }

        private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            //- изменение текущего значения
            if (comboBox3.SelectedIndex == comboBox2.SelectedIndex || comboBox2.SelectedIndex == -1)
            {
                //- если значения равны или неопределены
                return;
            }
            comboBox3.SelectedItem = comboBox2.SelectedItem;
        }

        private void comboBox3_SelectedIndexChanged(object sender, EventArgs e)
        {
            //- изменение текущего значения
            if (comboBox2.SelectedIndex == comboBox3.SelectedIndex || comboBox3.SelectedIndex == -1)
            {
                //- если значения равны или неопределены
                return;
            }
            comboBox2.SelectedItem = comboBox3.SelectedItem;
        }

        private void Form2_FormClosing(object sender, FormClosingEventArgs e)
        {
            //- Становится активной главная форма
            ((ChildForm)template_dll.ChildForm.cMain.Form1Control).Enabled = true;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //- Закрыть форму без изменений
            ((ChildForm)template_dll.ChildForm.cMain.Form1Control).button6.Enabled = false;
            this.Close();
        }
    }
}
